package com.design.patterns.structuralModel.visitor;

import com.design.patterns.structuralModel.visitor.service.action.Fail;
import com.design.patterns.structuralModel.visitor.service.action.Success;
import com.design.patterns.structuralModel.visitor.service.person.Man;
import com.design.patterns.structuralModel.visitor.service.person.Woman;

/**
 * 访问者模式
 * 目的：表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
 */
public class VisitorMain {
    public static void main(String[] args) {
        /**
         * 利用双分派机制去将类动态加载出来
         */
        Man man = new Man();
        Woman woman = new Woman();
        Fail fail = new Fail();
        man.accept(fail);
        woman.accept(fail);
        Success success = new Success();
        man.accept(success);
        woman.accept(success);
    }
}
